package visao;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.event.CellEditEvent;

import modelo.Equipe;
import modelo.Jogador;
import controle.ControleEquipe;
import controle.ControleJogador;

@ManagedBean(name = "equipeBean")
@SessionScoped
public class EquipeBean {

	private Equipe equipe = new Equipe();
	private ControleEquipe controle = new ControleEquipe();
	private ControleJogador controleJogador = new ControleJogador();
	private List<Equipe> equipes = new ArrayList<Equipe>();
	private List<Equipe> equipesOne = new ArrayList<Equipe>();
	
	
	public List<Equipe> getEquipesOne() {
		equipesOne =  controle.listarTodos();
		return equipesOne;
	}

	private Equipe equipeSelecionada = new Equipe();
	
	private List<Jogador> jogadores = new ArrayList<Jogador>();
	
	
	public Equipe getEquipe() {
		return equipe;
	}
	public void setEquipe(Equipe equipe) {
		this.equipe = equipe;
	}
	public List<Equipe> getEquipes() {
		equipes =  controle.listarTodos();
		return equipes;
	}
	
	public void setEquipes(List<Equipe> equipes) {
		this.equipes = equipes;
	}
	public Equipe getEquipeSelecionada() {
		return equipeSelecionada;
	}
	public void setEquipeSelecionada(Equipe equipeSelecionada) {
		this.equipeSelecionada = equipeSelecionada;
	}
	/*CRUD*/
	public String novo() {
		equipe = new Equipe();
		return "/restrito/cadastroEquipe";
	}

	public String voltar() {
		equipe = new Equipe();
		return "/restrito/indexEquipe";
	}
	
	
	public String Salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			controle.salvar(equipe);
		
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_INFO,
					"Equipe Cadastrada com Sucesso!", ""));
			equipe = new Equipe();
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
		}
		return "/restrito/indexEquipe";
	}
	
	public String excluir() {
		FacesContext faces = FacesContext.getCurrentInstance();
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession session = (HttpSession) externalContext.getSession(true);
		LoginBean loginBean = (LoginBean) session.getAttribute("loginBean");
		if (loginBean == null || !loginBean.isLogado()) {
			faces.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Voce deve estar logado para acessar essa pagina!",""));
			return "/publico/login";
		}
		
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			jogadores =controleJogador.buscarPorEquipe(equipe);
			for(Jogador jogador: jogadores){
				controleJogador.excluir(jogador);
			}
			controle.excluir(equipeSelecionada);
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "/publico/listarEquipe";
	}

	public String alterar() {
		FacesContext faces = FacesContext.getCurrentInstance();
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession session = (HttpSession) externalContext.getSession(true);
		LoginBean loginBean = (LoginBean) session.getAttribute("loginBean");
		if (loginBean == null || !loginBean.isLogado()) {
			faces.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Voce deve estar logado para acessar essa pagina!",""));
			return "/publico/login";
		}
		this.equipe = this.equipeSelecionada;
		return "/restrito/cadastroEquipe";
	}
	/*FIM CRUD*/
	
	/*LISTAR*/
	public String buscarTodos() {
		equipes = null;
		equipe = new Equipe();
		
		equipes = controle.listarTodos();
		return "/publico/listarEquipe";
	}
	
	public String buscarPorId() {
		FacesContext context = FacesContext.getCurrentInstance();
		equipes = new ArrayList<Equipe>();
		try {
			equipes.add(controle.buscarPorId(equipe.getId()));
			equipe = new Equipe();
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "/publico/listarEquipe";
	}
	
	public String buscarPorNome() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			equipes = null;
			equipes = new ArrayList<Equipe>();
			equipes.add(equipeSelecionada);
			equipeSelecionada = new Equipe();
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "/publico/listarEquipe";
	}
	
	public String buscarPorTecnico() {
		equipes = null;
		equipes = new ArrayList<Equipe>();
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			equipes = controle.buscarPorTecnico(equipe.getTecnico());
			equipe = new Equipe();
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "/publico/listarEquipe";
	}
	/*FIM LISTAR*/
	public List<Jogador> getJogadores() {
		//jogadores = new ArrayList<Jogador>();
		
		return jogadores;
	}
	
	
	
	public void setJogadores(List<Jogador> jogadores) {
		this.jogadores = jogadores;
	}
	
	    public void onCellEdit(CellEditEvent event) {
	        Object oldValue = event.getOldValue();
	        Object newValue = event.getNewValue();
	         
	        if(newValue != null && !newValue.equals(oldValue)) {
	            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
	            FacesContext.getCurrentInstance().addMessage(null, msg);
	        }
	    }
}